image: Invalidate icon helper when unrealizing
authorBenjamin Otte <otte@redhat.com>
Tue, 15 Nov 2016 05:36:34 +0000 (06:36 +0100)
committerBenjamin Otte <otte@redhat.com>
Tue, 15 Nov 2016 16:49:19 +0000 (17:49 +0100)
This frees up any cached surfaces and textures in the iconhelper,
ensuring that the renderer can release its texture data.

gtk/gtkiconhelper.c
gtk/gtkiconhelperprivate.h
gtk/gtkimage.c

index 5bd099d5470f6c0560cd58a11635c2814ffdcc59..e02e43fbca44b47a5a469df1498d23046a740055 100644 (file)
@@ -48,7 +48,7 @@ struct _GtkIconHelperPrivate {
 
 G_DEFINE_TYPE_WITH_PRIVATE (GtkIconHelper, gtk_icon_helper, GTK_TYPE_CSS_GADGET)
 
-static void
+void
 gtk_icon_helper_invalidate (GtkIconHelper *self)
 {
   g_clear_pointer (&self->priv->texture, gsk_texture_unref);
index 0fd324097b4aa873cd18295ebc9f07c9f6afabc8..acfdd20fde7449001a95e07b60d642b077a84a75 100644 (file)
@@ -132,6 +132,7 @@ gboolean _gtk_icon_helper_get_force_scale_pixbuf (GtkIconHelper *self);
 void     _gtk_icon_helper_set_force_scale_pixbuf (GtkIconHelper *self,
                                                   gboolean       force_scale);
 
+void      gtk_icon_helper_invalidate (GtkIconHelper *self);
 void      gtk_icon_helper_invalidate_for_change (GtkIconHelper     *self,
                                                  GtkCssStyleChange *change);
 
index ffb5f81d6df9062093e96905ed7510b2791fe63e..4d5e8d72a3763ff79ca199d5182a268756e5f56d 100644 (file)
@@ -1297,7 +1297,12 @@ gtk_image_unmap (GtkWidget *widget)
 static void
 gtk_image_unrealize (GtkWidget *widget)
 {
-  gtk_image_reset_anim_iter (GTK_IMAGE (widget));
+  GtkImage *image = GTK_IMAGE (widget);
+  GtkImagePrivate *priv = image->priv;
+
+  gtk_image_reset_anim_iter (image);
+
+  gtk_icon_helper_invalidate (priv->icon_helper);
 
   GTK_WIDGET_CLASS (gtk_image_parent_class)->unrealize (widget);
 }